package com.bzkj.msfx.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * @projectName: bzkj-wms
 * @package: com.bzkj.wms.utils
 * @className: MsfxCommonUtil
 * @description: 码上放心通用工具类
 * @author: C1309
 * @createDate: 2024年10月22日
 * @version: v1.0
 */
public class MsfxCommonUtil {
    /**
     * 解析码上放心客户信息
     *
     * @param file 前端上传的文件
     * @param deptId wms部门id
     * @return 解析结果封装
     */
//    public static Map<String, Object> parsingMsfxCustomer(MultipartFile file, Long deptId) {
//        ArrayList<MsfxCustomer> msfxCustomers = new ArrayList<>();
//        Map<String, Object> resMap = new HashMap<>();
//        try {
//
//            BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream(), "GBK"));
//            String line;
//            while ((line = reader.readLine()) != null) {
//                if (!line.isEmpty()) {
//                    MsfxCustomer msfxCustomer = new MsfxCustomer();
//                    String[] split = line.split(",");
//                    if (split.length == 3) {
//                        msfxCustomer.setMsfxCustomerCode(split[2]);
//                        msfxCustomer.setMnecode(split[1]);
//                        msfxCustomer.setMsfxCustomerName(split[0]);
//                        msfxCustomer.setDeptId(deptId);
//                    } else if (split.length == 2) {
//                        msfxCustomer.setMnecode(split[1]);
//                        msfxCustomer.setMsfxCustomerName(split[0]);
//                        msfxCustomer.setDeptId(deptId);
//                    }
//                    msfxCustomers.add(msfxCustomer);
//                }
//            }
//            resMap.put("status", true);
//            resMap.put("msg", "文件读取成功");
//            resMap.put("data", msfxCustomers);
//        } catch (IOException e) {
//            // 处理异常，可以根据实际需求进行处理
//            resMap.put("status", false);
//            resMap.put("msg", "文件读取失败！");
//        }
//        return resMap;
//    }
//
//    /**
//     * 解析药品信息文件
//     *
//     * @param file 药品信息文件
//     * @param deptId 部门id
//     * @return 文件解析结果
//     */
//    public static Map<String, Object> parsingMsfxDrugsXml(MultipartFile file, Long deptId) {
//        ArrayList<MsfxDrugInfo> drugInfos = new ArrayList<>();
//        Map<String, Object> resMap = new HashMap<>();
//        try {
//            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
//            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
//            Document doc = dBuilder.parse(file.getInputStream());
//            doc.getDocumentElement().normalize();
//
//            NodeList productList = doc.getElementsByTagName("product");
//            for (int i = 0; i < productList.getLength(); i++) {
//                Element productElement = (Element) productList.item(i);
//                String productName = productElement.getAttribute("productName");
//                String productCode = productElement.getAttribute("productCode");
//
//                NodeList subTypeList = productElement.getElementsByTagName("subType");
//                for (int j = 0; j < subTypeList.getLength(); j++) {
//                    Element subTypeElement = (Element) subTypeList.item(j);
//                    String typeNo = subTypeElement.getAttribute("typeNo");
//                    String authorizedNo = subTypeElement.getAttribute("authorizedNo");
//                    String type = subTypeElement.getAttribute("type");
//                    String spec = subTypeElement.getAttribute("spec");
//                    String packagespec = subTypeElement.getAttribute("packageSpec");
//                    String packunit = subTypeElement.getAttribute("packUnit");
//                    String physicdetailtype = subTypeElement.getAttribute("physicDetailType");
//                    NodeList resCodeList = subTypeElement.getElementsByTagName("resCode");
//                    for (int l = 0; l < resCodeList.getLength(); l++) {
//                        Element resCodeElement1 = (Element) resCodeList.item(l);
//                        String codeVersion = resCodeElement1.getAttribute("codeVersion");
//                        String codeLevel = resCodeElement1.getAttribute("codeLevel");
//                        String pkgRatio = resCodeElement1.getAttribute("pkgRatio");
//                        String resCodeValue = resCodeElement1.getTextContent();
//                        MsfxDrugInfo drugInfo = new MsfxDrugInfo();
//                        drugInfo.setProductName(productName);
//                        drugInfo.setProductCode(productCode);
//                        drugInfo.setTypeNo(typeNo);
//                        drugInfo.setAuthorizedNo(authorizedNo);
//                        drugInfo.setCodeVersion(codeVersion);
//                        drugInfo.setCodeLevel(codeLevel);
//                        drugInfo.setPkgRatio(pkgRatio);
//                        drugInfo.setResCode(resCodeValue);
//                        drugInfo.setType(type);
//                        drugInfo.setSpec(spec);
//                        drugInfo.setPackageSpec(packagespec);
//                        drugInfo.setPackUnit(packunit);
//                        drugInfo.setPhysicDetailType(physicdetailtype);
//                        drugInfo.setDrugCode(codeVersion + resCodeValue);
//                        drugInfo.setDeptId(deptId);
//                        drugInfos.add(drugInfo);
//                    }
//                    resMap.put("status", true);
//                    resMap.put("msg", "文件读取成功");
//                    resMap.put("data", drugInfos);
//                }
//            }
//        } catch (ParserConfigurationException | IOException | SAXException e) {
//            // 处理异常，可以根据实际需求进行处理
//            e.printStackTrace();
//            resMap.put("status", false);
//            resMap.put("msg", "文件读取失败！");
//        }
//        return resMap;
//    }


    /**
     * 对给定的数据列表进行批次处理
     *
     * @param dataList 待处理的数据列表
     * @return 处理后的批次数据列表
     */
    public static <T> List<List<T>> process(List<T> dataList, Integer batchSize) {
        // 获取数据总数
        int totalDataCount = dataList.size();
        // 根据每批数量计算批次数
        int batches = (int) Math.ceil((double) totalDataCount / batchSize);
        ArrayList<List<T>> list = new ArrayList<>();
        for (int i = 0; i < batches; i++) {
            int startIdx = i * batchSize;
            int endIdx = Math.min((i + 1) * batchSize, totalDataCount);
            List<T> batchData = dataList.subList(startIdx, endIdx);
            list.add(batchData);
        }
        return list;
    }
}
